使用scala在spark | 您所在的位置:网站首页 › spark 邮件按串分组 › 使用scala在spark |
环境- spark-3.0.1-bin-hadoop2.7、eclipse 2.12.3、Scala、SparkSQL、eclipse-jee-oxygen-2-linux-gtk-x86_64 我有一个csv文件,它有3列数据类型:String,Long,Date。我想按字符串的第一列进行分组,并检索最大的日期值。 为此,我从文本文件中创建了Person对象的RDD,并将其转换为dataframe 'peopleDF‘。已将数据帧注册为临时视图。我使用spark提供的sql方法运行以下sql语句。 代码语言:javascript复制val maxDateDF = spark.sql("SELECT name, max(birthDate) maxDate FROM people group by name")但是它没有给出一个名字的正确的最大日期。 我的样本数据如下 代码语言:javascript复制Michael, 29,01/03/1992 Justin, 19,01/05/2002 Ben Stokes, 29,01/07/1992 Justin, 18,01/08/2003 Ben Stokes, 29,01/07/1993 Ben Stokes, 29,30/06/1993如何检索按其他字段名称分组的最大日期值? 代码语言:javascript复制package org.apache.spark.examples.sql import org.apache.spark.sql.Row import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types._ import java.sql.Date import breeze.linalg.max object SparkSQLExample1 { case class Person(name: String, age: Long, birthDate: String) def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("Spark SQL basic example") .config("spark.master", "local").getOrCreate(); import spark.implicits._ runInferSchemaExample(spark); spark.stop() } private def runInferSchemaExample(spark: SparkSession): Unit = { import spark.implicits._ val peopleDF = spark.sparkContext .textFile("examples/src/main/resources/people.txt") .map(_.split(",")) .map(attributes => Person(attributes(0), attributes(1).trim.toInt,attributes(2))) .toDF() peopleDF.groupBy("age").count().show(); peopleDF.groupBy("name").avg("age").show(); peopleDF.createOrReplaceTempView("people") implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]] val maxDateDF = spark.sql("SELECT name, max(birthDate) maxDate FROM people group by name") maxDateDF.map(teenager => teenager.getValuesMap[Any](List("name", "maxDate"))).collect().foreach(println) } } |
CopyRight 2018-2019 实验室设备网 版权所有 |